// model包定义了应用程序的核心业务模型和接口
// 遵循依赖倒置原则, 外层依赖内层的抽象接口
package model

import (
	"context"
	"time"
)

const (
	// TableUser SQLite中用户表的名称
	TableUser = "users"
)

// User 用户领域模型
// 定义用户的核心属性和行为
type User struct {
	ID        uint      `gorm:"primaryKey" json:"id"`      // 用户唯一标识符, 自增ID
	Name      string    `gorm:"not null" json:"name"`      // 用户姓名
	Email     string    `gorm:"uniqueIndex" json:"email"`  // 用户邮箱, 通常作为登录凭证, 唯一索引
	Password  string    `gorm:"not null" json:"-"`         // 用户密码, 存储前应进行加密, 不在JSON中返回
	CreatedAt time.Time `gorm:"autoCreateTime" json:"-"`   // 创建时间
	UpdatedAt time.Time `gorm:"autoUpdateTime" json:"-"`   // 更新时间
}

// UserRepository 用户仓储接口
// 定义对用户数据的操作方法, 具体实现在repository层
type UserRepository interface {
	// Create 创建新用户
	Create(c context.Context, user *User) error
	// Fetch 获取所有用户列表
	Fetch(c context.Context) ([]User, error)
	// GetByEmail 通过邮箱查询用户
	GetByEmail(c context.Context, email string) (User, error)
	// GetByID 通过ID查询用户
	GetByID(c context.Context, id uint) (User, error)
}
